<?xml version="1.0" ?>

<xsl:stylesheet   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
						xmlns:lzc="http://schemas.icitadel.com/Lazarus/Compiled.xsd"
                  version="1.0">

  <xsl:output method="text"/>

  <xsl:include href="../../common.xsl" />
  <xsl:include href="../../convert.xsl" />

  <xsl:template match="lzc:project">

    <!-- ********************************************** -->
    <!-- Variable Declarations                          -->
    <!-- ********************************************** -->
    <xsl:variable name="v_NamespacePrefix">
      <xsl:if test="/lzc:project/@namespaceprefix">
        <xsl:value-of select="/lzc:project/@namespaceprefix" />
        <xsl:text>:</xsl:text>
      </xsl:if>
    </xsl:variable>

    <xsl:variable name="v_RuntimeNamespace">
      <xsl:if test="/lzc:project/@defaultnamespace">
        <xsl:value-of select="/lzc:project/@defaultnamespace"/>
      </xsl:if>
    </xsl:variable>

    <xsl:variable name="v_BusinessConceptNamespace">
      <xsl:if test="/lzc:project/@businessconcept">
        <xsl:text>.</xsl:text>
        <xsl:value-of select="/lzc:project/@businessconcept" />
      </xsl:if>
    </xsl:variable>

    <xsl:variable name="v_AncestorClass">
      <xsl:text>DataManagerBase</xsl:text>
    </xsl:variable>

    <xsl:variable name="v_DerivedNamespace">
      <xsl:value-of select="$v_RuntimeNamespace" />
      <xsl:text>.Model</xsl:text>
      <xsl:value-of select="$v_BusinessConceptNamespace" />
    </xsl:variable>

    <xsl:variable name="v_CLRNamespace">
      <xsl:value-of select="$v_RuntimeNamespace" />
      <xsl:text>.Model</xsl:text>
      <xsl:value-of select="$v_BusinessConceptNamespace" />
      <xsl:text>.Generated</xsl:text>
    </xsl:variable>

    <xsl:variable name="v_DerivedClassName">
      <xsl:text>Derived.</xsl:text>
      <xsl:value-of select="@name" />
      <xsl:text>DataManager</xsl:text>
    </xsl:variable>

    <xsl:variable name="v_ClassName">
      <xsl:value-of select="@name" />
      <xsl:text>DataManagerBase</xsl:text>
    </xsl:variable>

    <!-- ********************************************** -->
    <!-- Output Processing                              -->
    <!-- ********************************************** -->
    <xsl:text>using System;
using System.Collections;
using System.Data;
using System.Diagnostics;
using System.Xml;

using OR.Reuse.Persistence;

using Derived = </xsl:text><xsl:value-of select="$v_DerivedNamespace" /><xsl:text>;
</xsl:text>

    <xsl:text>
namespace </xsl:text>
    <xsl:value-of select="$v_CLRNamespace" />
    <xsl:text>
{
    public class </xsl:text>
    <xsl:value-of select="$v_ClassName" />
    <xsl:text> : </xsl:text>
    <xsl:value-of select="$v_AncestorClass" />
    <xsl:text>
    {
        #region Private Storage
</xsl:text>

    <xsl:variable name="v_AllDataManagerCollections" select="//lzc:object[ not(@type = 'Intersection') ]" />

    <xsl:for-each select="$v_AllDataManagerCollections">

      <!-- ********************************************** -->
      <!-- Variable Declarations                          -->
      <!-- ********************************************** -->

      <xsl:variable name="v_ObjectName">
        <xsl:text>All</xsl:text>
        <xsl:value-of select="@plural-name" />
      </xsl:variable>

      <xsl:variable name="v_CollectionName">
        <xsl:text>Derived.</xsl:text>
        <xsl:value-of select="@name" />
        <xsl:text>Collection</xsl:text>
      </xsl:variable>

      <xsl:text>
        private </xsl:text>
      <xsl:value-of select="$v_CollectionName"/>
      <xsl:text> m</xsl:text>
      <xsl:value-of select="$v_ObjectName" />
      <xsl:text>;</xsl:text>
    </xsl:for-each>

    <xsl:text>
        #endregion

        #region Constructors
        public </xsl:text><xsl:value-of select="$v_ClassName" /><xsl:text>()
        {</xsl:text>
    <xsl:for-each select="$v_AllDataManagerCollections">

      <xsl:variable name="v_ObjectName">
        <xsl:text>All</xsl:text>
        <xsl:value-of select="@plural-name" />
      </xsl:variable>

      <xsl:variable name="v_CollectionName">
        <xsl:text>Derived.</xsl:text>
        <xsl:value-of select="@name" />
        <xsl:text>Collection</xsl:text>
      </xsl:variable>
      <xsl:text>
            m</xsl:text>
      <xsl:value-of select="$v_ObjectName" />
      <xsl:text> = new </xsl:text>
      <xsl:value-of select="$v_CollectionName" />
      <xsl:text>(this as </xsl:text>
      <xsl:value-of select="$v_DerivedClassName" />
      <xsl:text>);</xsl:text>
            
    </xsl:for-each><xsl:text>
        }
        #endregion
    }
}
      </xsl:text>
  </xsl:template>

</xsl:stylesheet>